package setof.collection;

import setof.collection.list.Student;

import java.util.*;
import java.util.function.Consumer;

/*
集合:存储数据的容器,分{单列集合,双列集合}
    单列集合:实现collection接口,分{实现list接口,set接口}
        list接口:存取有序,有索引,可存储重复元素{ArrayList,LinkedList}
        set接口:存取无序(LinkedHashSet除外),无索引,不可存储重复元素(一般){TreeSet,HashSet,LinkedHashSet}
    双列集合:实现map接口,{TreeMap,HashMap,LinkedHashMap}
 */
/*
Collection:方法介绍
       add():添加数据
       size():集合长度
       clear():清空集合
       isEmpty():集合是否为长度为空
       contains():是否包含元素
       remove():删除
     os:最后两种方法,底层采用equals()方法,比较地址值.如果存储对象,应该重写equals()方法

集合通用遍历:普通for循环遍历,对于实现list接口的集合可以使用,对于其他集合,无法使用
        迭代器:
                1.使用集合中的iterator()方法,返回一个Iterator实现类对象
                2.通过Iterator实现类对象调用next()方法,返回下一个元素;hasNext()方法,显示是否还有元素可以迭代
                 os:next()方法会向后移动指针,返回上一个元素,为了避免错误,循环中最好只调用一次next()方法
        增强for循环
                对迭代器方法的简化,本质上还是迭代器方法
                for(存储数据类型 变量名:遍历集合或数组)
        forEach
                实现增强for循环,本质也是迭代器
                集合对象.forEach(实现类对象)


             }
 */
public class CollectionDemo {
    public static void main(String[] args) {
        Collection<Student>collection=new ArrayList<>();

        collection.add(new Student("张三",23));
        collection.add(new Student("李四",24));
        //获取迭代器对象
        Iterator<Student> iterator = collection.iterator();
        //调用方法,获取集合元素
        while (iterator.hasNext()){
            Student student = iterator.next();
            System.out.println(student);
        }
        //增强for循环
        for (Student student:collection){
            System.out.println(student);
        }
        //forEach
        //被操作对象  调用方法    接口实现类对象(通过匿名内部类,实现接口,重写方法,实现具体操作)
        collection.forEach(new Consumer<Student>() {
            @Override
            public void accept(Student student) {
                System.out.println(student);
            }
        });

    }
}
